package com.hsgene.product.service;

import com.hsgene.common.util.result.ApiResult;
import com.hsgene.common.util.result.NullObject;
import com.hsgene.common.util.support.Pagination;
import com.hsgene.product.condition.PackageCondition;
import com.hsgene.product.domain.GeneticTestingPackage;
import com.hsgene.product.dto.GeneticTestingPackageDto;
import com.hsgene.product.dto.PackageDetilOrgsDto;
import com.hsgene.product.dto.peanut.GeneticTestingPackageDetilPeanutDto;
import com.hsgene.product.dto.peanut.GeneticTestingPackageKeywordPeanutDto;
import com.hsgene.product.dto.peanut.GeneticTestingPackagePeanutDto;
import com.hsgene.product.dto.peanut.PackageList;

import java.util.List;

/**
 * @desc:基因检测套餐
 * @author: fuxiang
 * @date: 2018/9/18 16:05
 */
public interface ProductService {
    /**
     * 添加基因检测套餐
     * @param geneticTestingPackage
     * @return
     */
    ApiResult<GeneticTestingPackage> addProduct(GeneticTestingPackage geneticTestingPackage);

    /**
     * 更新套餐信息
     * @param geneticTestingPackage
     * @return
     */
    ApiResult<GeneticTestingPackage> updateProduct(GeneticTestingPackage geneticTestingPackage);

    /**
     * 根据套餐名称，查询套餐
     * @param packageName
     * @return
     */
    ApiResult<GeneticTestingPackage> getByPackageName(String packageName);

    /**
     * 标记套餐被使用
     * @param packageId
     * @return
     */
    ApiResult<NullObject> updateUsed(String packageId);

    /**
     * 获取套餐列表
     * @param condition
     * @return
     */
    ApiResult<Pagination<GeneticTestingPackageDto>> getList(PackageCondition condition);

    /**
     * 获取套餐详情
     * @author FX
     * @date 2018/11/28 16:07
     * @param id
     * @param costPermission 判断是否显示机构成本 cost为显示
     * @return
     */
    ApiResult getPackageById(String id,String costPermission);

    /**
     * 删除套餐
     * @param id
     * @return
     */
    ApiResult<GeneticTestingPackage> deletePackageById(String id);

    /**
     * 批量删除
     * @param condition
     * @return
     */
    ApiResult<GeneticTestingPackageDto> deletePackageByIds(List<GeneticTestingPackageDto> condition);

    /**
     * 花生仁获取套餐详情
     * @param id 套餐id
     * @return
     */
    ApiResult<GeneticTestingPackagePeanutDto> peanutPackageDetail(String id);

    /**
     * g根据关键字查询套餐（花生仁）
     * @param
     * @return
     */
    ApiResult<List<GeneticTestingPackageKeywordPeanutDto>> getByKeyword(PackageCondition condition);

    /**
     * 根据套餐id找详情（花生仁）
     * @param id
     * @return
     */
    ApiResult<List<GeneticTestingPackageDetilPeanutDto>> getDetailsByPackageId(String id);

    /***
     * 花生仁查询套餐检测信息
     * @author jcl
     * @date 2019/1/8 9:51
     * @param packageId 套餐id
     * @param agencyId 机构id
     * @return
     */
    ApiResult packageTestingInfo(String packageId,String agencyId);

    /**
     * 套餐分页列表
     * @param condition
     * @return
     */
    ApiResult<Pagination<PackageList>> getListPeanut(PackageCondition condition);

    /**
     * 花生仁的套餐分页
     * @param condition
     * @return
     */
    ApiResult getByKeywordPage(PackageCondition condition);

    /**
     * g根据sampleId查找detail表的数量
     * @param samplyId
     * @return
     */
    ApiResult<Integer> getCountBySamplyId(String samplyId);

    /**
     * 套餐详情（金琉璃）
     * @param id
     * @return
     */
    ApiResult glazePackageDetail(String id);
    /**
     *获取套餐下的机构信息
     * @author FX
     * @date 2018/11/23 12:19
     * @param id
     * @return
     */
    ApiResult<List<PackageDetilOrgsDto>> getArgsByPackageId(String id);
    /**
     *标记套餐被使用（批量）
     * @author FX
     * @date 2018/12/20 13:41
     * @param ids
     * @return
     */
    ApiResult updateUsedMore(List<String> ids);
}
